import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Stack;

import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

import jade.core.Agent;
import jade.core.behaviours.*;


public class DateDoctor extends Agent{
	
	Conectare conect = new Conectare();
	StivaDoctor stivadoctor = new StivaDoctor();
	
	DefaultTableModel modeldoctor = new CautaDoctor();
	Stack<Integer> indexdoctor = new Stack<Integer>();
	private JOptionPane err_mesaj;

	public void nuExista() {
		err_mesaj = new JOptionPane();
		err_mesaj.showMessageDialog(null,
				"Cautarea dumneavoastra nu exista in baza de date !",
				"Mesaj de eroare", err_mesaj.ERROR_MESSAGE);
	}
	// se incarca tabelul din baza de date
	public DefaultTableModel incarcaTabel() {
		
		Connection con = conect.getConnection();
		
		for (int i = 0; i < indexdoctor.size(); i++) {
			modeldoctor.addRow(new Object[] {
					
					stivadoctor.id_doctor(con).elementAt(indexdoctor.elementAt(i)),
					stivadoctor.nume_doctor(con).elementAt(indexdoctor.elementAt(i)),
					stivadoctor.specializare(con).elementAt(indexdoctor.elementAt(i)),
					stivadoctor.varsta(con).elementAt(indexdoctor.elementAt(i)),
					stivadoctor.nume_spital(con).elementAt(indexdoctor.elementAt(i)),
					stivadoctor.reclamatii(con).elementAt(indexdoctor.elementAt(i))
					});
		}
		stivadoctor.id_doctor(con).removeAllElements();
		stivadoctor.nume_doctor(con).removeAllElements();
		stivadoctor.specializare(con).removeAllElements();
		stivadoctor.varsta(con).removeAllElements();
		stivadoctor.nume_spital(con).removeAllElements();
		stivadoctor.reclamatii(con).removeAllElements();
		
		indexdoctor.removeAllElements();
		try {
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return modeldoctor;
	}

	//cauta in tabel dupa un string in functie de pozitia lui in tabel
	
	public void cautareTabel(int pozitie, String cauta) {
		
		Connection con = conect.getConnection();
		
		switch (pozitie) {
		
		case 0:
			if (stivadoctor.id_doctor(con).contains(cauta)) {
				for (int i = 0; i < stivadoctor.id_doctor(con).size(); i++) {
					if (stivadoctor.id_doctor(con).elementAt(i).equals(cauta)) {
						indexdoctor.add(stivadoctor.id_doctor(con).indexOf(cauta, i));
					}
				}
			} else {
				nuExista();
			}
			break;
			
		case 1:
			if (stivadoctor.nume_doctor(con).contains(cauta)) {
				for (int i = 0; i < stivadoctor.nume_doctor(con).size(); i++) {
					if (stivadoctor.nume_doctor(con).elementAt(i).equals(cauta)) {
						indexdoctor.add(stivadoctor.nume_doctor(con).indexOf(cauta, i));
					}
				}
			} else {
				nuExista();
			}
			break;
		case 2:
			if (stivadoctor.specializare(con).contains(cauta)) {
				for (int i = 0; i < stivadoctor.specializare(con).size(); i++) {
					if (stivadoctor.specializare(con).elementAt(i).equals(cauta)) {
						indexdoctor.add(stivadoctor.specializare(con).indexOf(cauta, i));
					}
				}
			} else {
				nuExista();
			}
			break;
		case 3:
			if (stivadoctor.varsta(con).contains(cauta)) {
				for (int i = 0; i < stivadoctor.varsta(con).size(); i++) {
					if (stivadoctor.varsta(con).elementAt(i).equals(cauta)) {
						indexdoctor.add(stivadoctor.varsta(con).indexOf(cauta, i));
					}
				}
			} else {
				nuExista();
			}
			break;
		case 4:
			if (stivadoctor.nume_spital(con).contains(cauta)) {
				for (int i = 0; i < stivadoctor.nume_spital(con).size(); i++) {
					if (stivadoctor.nume_spital(con).elementAt(i).equals(cauta)) {
						indexdoctor.add(stivadoctor.nume_spital(con).indexOf(cauta, i));
					}
				}
			} else {
				nuExista();
			}
			break;
		case 5:
			if (stivadoctor.reclamatii(con).contains(cauta)) {
				for (int i = 0; i < stivadoctor.reclamatii(con).size(); i++) {
					if (stivadoctor.reclamatii(con).elementAt(i).equals(cauta)) {
						indexdoctor.add(stivadoctor.reclamatii(con).indexOf(cauta, i));
					}
				}
	
			} else {
				nuExista();
			}
			break;
		}
		try {
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	// goleste tabelul dupa ce se termina operatiile asupra lui
	
	public DefaultTableModel golesteTabel() {
		while (modeldoctor.getRowCount() > 0) {
			modeldoctor.removeRow(0);
		}
		return modeldoctor;
	}
}
